import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * 定义 MyArrayList ,模拟 JDK 中的 ArrayList - 泛型类的使用
 *
 * @author zhu
 * @date 2024-04-01
 */
public class MyArrayList<E> {
    /**
     * 集合的实际大小
     */
    private int size;
    /**
     * ArrayList集合实际是对数组进行封装 - 动态数组
     */
    private Object[] elementData;
    /**
     * 数组默认容量 - 每次添加元素之前，都需要判断容量，按需进行扩容
     */
    private static final int DEFAULT_CAPACITY = 3;

    /**
     * 缺省（默认）构造方法
     */
    public MyArrayList(){
        elementData = new Object[DEFAULT_CAPACITY];
    }
    public MyArrayList(int size){
        elementData = new Object[size];
    }

    /**
     * 实现数组动态扩容
     */
    public void ensureCapacityInternal(){
        if (size >= elementData.length){
            // 1.动态扩容 - 原来长度 * 2
            Object[] newArr = new Object[elementData.length];

            // 2.复制原数组的数据
            System.arraycopy(elementData,0,newArr,0,elementData.length);

            elementData = newArr;
        }
    }

    /**
     * 添加元素
     *
     * @param e
     * @return
     */
    public boolean add(E e){
        // 判断数组容量是否充足，不充足需要动态扩容
        ensureCapacityInternal();

        // 添加元素，size加1
        this.elementData[size++] = e;
        // size++
        return true;
    }
    public Object[] getElementData(){
        return this.elementData;
    }

    public E remove(int index){
        // 2.获取
        return
    }
}
